import { login, getUserInfo, getUserDetailById } from "@/api/user"
import { setToken, getToken, removeToken} from '@/utils/auth'

export default {
  // 开启命名空间  防止冲突
  namespaced: true,
  // 定义store数据  是响应式 数据变化 引发 视图更新
  state: {
    token: getToken() || '',
    userInfo: {}
  },
  // 定义同步修改方法  vuex中要求只有一种方式修改数据，就是提交一个mutations
  mutations: {
    setToken(state, payload) {
      state.token = payload
      setToken(payload)
    },
    setUserInfo(state, payload) {
      state.userInfo = payload
    },
    removeUserInfo(state) {
      state.token = '',
      state.userInfo = {},
      removeToken()
    }
  },
  // 定义一步方法 ajax api 处理异步
  actions: {
    async fetchLogin(ctx, payload) {
      const token = await login(payload)
      console.log(token)
      // 提交mutations
      ctx.commit('setToken', token)
    },
    async fetUserInfo(ctx) {
      const res = await getUserInfo()
      const resPhoto = await getUserDetailById(res.userId)
      // 使用对象的方法
      ctx.commit('setUserInfo', { ...res, ...resPhoto })
      return res
    }
  }
}
